﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using DAO;
using DTO;

namespace QLKS
{
    public partial class frmThayDoiQuiDinh : Form
    {
        public frmThayDoiQuiDinh()
        {
            InitializeComponent();
        }
        private void LoadListview(ListView lV, DataTable dt)
        {
            lV.Items.Clear();

            foreach (DataRow dr in dt.Rows)
            {
                ListViewItem lv = new ListViewItem(dr[0].ToString());

                for (int i = 1; i < dt.Columns.Count; i++)
                {
                    lv.SubItems.Add(dr[i].ToString());
                }
                lV.Items.Add(lv);
            }
        }
        private void ChangeRatioButton(RadioButton rb1, RadioButton rb2, RadioButton rb3)
        {
            if (rb1.Checked == true)
            {
                rb2.Checked = false;
                rb3.Checked = false;
            }
        }
        private void frmThayDoiQuiDinh_Load(object sender, EventArgs e)
        {
            rdbLoaiPhong.Checked = true;
            txtTenLoaiKhach.Enabled = false;
            txtHeSoLoaiKhach.Enabled = false;
            lvLoaiKhach.Enabled = false;

            txtSoThuTu.Enabled = false;
            txtTyLePhuThu.Enabled = false;
            lvPhuThu.Enabled = false;
            DataTable dt = LoaiPhongDAO.GetAll();
            LoadListview(lvLoaiPhong, dt);
        }

        private void rdbLoaiPhong_CheckedChanged(object sender, EventArgs e)
        {
            ChangeRatioButton(rdbLoaiPhong, rdbLoaiKhach, rdbPhuThu);

            txtTenLoaiKhach.Enabled = false;
            txtHeSoLoaiKhach.Enabled = false;
            lvLoaiKhach.Enabled = false;

            txtSoThuTu.Enabled = false;
            txtTyLePhuThu.Enabled = false;
            lvPhuThu.Enabled = false;

            txtLoaiPhong.Enabled = true;
            txtDonGia.Enabled = true;
            txtSoKhachToiDa.Enabled = true;
            lvLoaiPhong.Enabled = true;

            lvLoaiKhach.Items.Clear();
            lvPhuThu.Items.Clear();
            DataTable dt = LoaiPhongDAO.GetAll();
            LoadListview(lvLoaiPhong, dt);
        }

        private void rdbLoaiKhach_CheckedChanged(object sender, EventArgs e)
        {
            ChangeRatioButton(rdbLoaiKhach, rdbLoaiPhong, rdbPhuThu);

            txtLoaiPhong.Enabled = false;
            txtDonGia.Enabled = false;
            txtSoKhachToiDa.Enabled = false;
            lvLoaiPhong.Enabled = false;

            txtTenLoaiKhach.Enabled = true;
            txtHeSoLoaiKhach.Enabled = true;
            lvLoaiKhach.Enabled = true;

            txtSoThuTu.Enabled = false;
            txtTyLePhuThu.Enabled = false;
            lvPhuThu.Enabled = false;

            lvLoaiPhong.Items.Clear();
            lvPhuThu.Items.Clear();
            DataTable dt = LoaiKhachHangDAO.GetAll();
            LoadListview(lvLoaiKhach, dt);
        }

        private void rdbPhuThu_CheckedChanged(object sender, EventArgs e)
        {
            ChangeRatioButton(rdbPhuThu, rdbLoaiKhach, rdbLoaiPhong);

            txtLoaiPhong.Enabled = false;
            txtDonGia.Enabled = false;
            txtSoKhachToiDa.Enabled = false;
            lvLoaiPhong.Enabled = false;

            txtTenLoaiKhach.Enabled = false;
            txtHeSoLoaiKhach.Enabled = false;
            lvLoaiKhach.Enabled = false;

            txtSoThuTu.Enabled = true;
            txtTyLePhuThu.Enabled = true;
            lvPhuThu.Enabled = true;

            lvLoaiKhach.Items.Clear();
            lvLoaiPhong.Items.Clear();
            DataTable dt = PhuThuDAO.GetAll();
            LoadListview(lvPhuThu, dt);
        }
        private int TimViTri(DataTable dt)
        {
            int k = 1;
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                if (int.Parse(dt.Rows[i].ItemArray[0].ToString()) == k)
                    k++;
            }
            return k;
        }

        private void btnInsert_Click(object sender, EventArgs e)
        {

            if (rdbLoaiPhong.Checked == true)
            {
                if (txtLoaiPhong.Text == "")
                {
                    MessageBox.Show("Loại phòng không để trống", "Thông báo");
                    return;
                }
                if (txtDonGia.Text == "")
                {
                    MessageBox.Show("Đơn giá không để trống", "Thông báo");
                    return;
                }
                if (txtSoKhachToiDa.Text == "")
                {
                    MessageBox.Show("Số khách tối đa không để trống", "Thông báo");
                    return;
                }
                DataTable dt1 = LoaiPhongDAO.GetAll();
                int ma = TimViTri(dt1);

                LoaiPhongDTO lp = new LoaiPhongDTO();
                lp.MaLoaiPhong = ma;
                lp.TenLoaiPhong = txtLoaiPhong.Text;
                lp.DonGia = float.Parse(txtDonGia.Text);
                lp.SoKhachToiDa = int.Parse(txtSoKhachToiDa.Text);

                DataTable dt2 = LoaiPhongDAO.LoaiPhongTheoTen(txtLoaiPhong.Text);
                if (dt2.Rows.Count > 0)
                {
                    MessageBox.Show("Tên loại phòng này đã có, vui lòng chọn tên khác", "Thông báo");
                    return;
                }

                if (MessageBox.Show("Bạn có thêm loại phòng này?", "Thông báo", MessageBoxButtons.YesNo) == DialogResult.Yes)
                {
                    LoaiPhongDAO.ThemLoaiPhong(lp);
                    MessageBox.Show("Thêm thành công", "Thông báo");
                }
                else
                {
                    return;
                }

                dt1 = LoaiPhongDAO.GetAll();
                LoadListview(lvLoaiPhong, dt1);

            }


            if (rdbLoaiKhach.Checked == true)
            {
                if (txtTenLoaiKhach.Text == "")
                {
                    MessageBox.Show("Loại khách không để trống", "Thông báo");
                    return;
                }
                if (txtHeSoLoaiKhach.Text == "")
                {
                    MessageBox.Show("Hệ số không để trống", "Thông báo");
                    return;
                }
                DataTable dt = LoaiKhachHangDAO.GetAll();
                int ma = TimViTri(dt);

                LoaiKhachHangDTO lk = new LoaiKhachHangDTO();
                lk.MaLoaiKhach = ma;
                lk.TenLoaiKhach = txtTenLoaiKhach.Text;
                lk.HeSoLoaiKhach = float.Parse(txtHeSoLoaiKhach.Text);

                if (MessageBox.Show("Bạn có thêm loại khách này?", "Thông báo", MessageBoxButtons.YesNo) == DialogResult.Yes)
                {
                    LoaiKhachHangDAO.ThemLoaiKhach(lk);
                    MessageBox.Show("Thêm thành công", "Thông báo");
                }
                else
                {
                    return;
                }
                dt = LoaiKhachHangDAO.GetAll();
                LoadListview(lvLoaiKhach, dt);

            }


            if (rdbPhuThu.Checked == true)
            {
                if (txtSoThuTu.Text == "")
                {
                    MessageBox.Show("Số thứ tự không để trống", "Thông báo");
                    return;
                }
                if (txtTyLePhuThu.Text == "")
                {
                    MessageBox.Show("Tỷ lệ phụ thu không để trống", "Thông báo");
                    return;
                }
                DataTable dt = PhuThuDAO.GetAll();
                int ma = TimViTri(dt);

                PhuThuDTO pt = new PhuThuDTO();
                pt.MaPhuThu = ma;
                pt.SoThuTu = int.Parse(txtSoThuTu.Text);
                pt.TyLePhuThu = float.Parse(txtTyLePhuThu.Text);

                if (MessageBox.Show("Bạn có muốn thêm phụ thu này?", "Thông báo", MessageBoxButtons.YesNo) == DialogResult.Yes)
                {
                    PhuThuDAO.ThemTyLePhuThu(pt);
                    MessageBox.Show("Thêm thành công", "Thông báo");
                }
                else
                {
                    return;
                }

                dt = PhuThuDAO.GetAll();
                LoadListview(lvPhuThu, dt);

            }
        }

        private void btnUpdate_Click(object sender, EventArgs e)
        {
            if (rdbLoaiPhong.Checked == true)
            {
                if (txtLoaiPhong.Text == "")
                {
                    MessageBox.Show("Loại phòng không để trống", "Thông báo");
                    return;
                }
                if (txtDonGia.Text == "")
                {
                    MessageBox.Show("Đơn giá không để trống", "Thông báo");
                    return;
                }
                if (txtSoKhachToiDa.Text == "")
                {
                    MessageBox.Show("Số khách tối đa không để trống", "Thông báo");
                    return;
                }
                if (lvLoaiPhong.SelectedIndices.Count > 0)
                {
                    int index = lvLoaiPhong.SelectedIndices[0];

                    LoaiPhongDTO lp = new LoaiPhongDTO();
                    lp.MaLoaiPhong = int.Parse(lvLoaiPhong.Items[index].SubItems[0].Text);
                    lp.TenLoaiPhong = txtLoaiPhong.Text;
                    lp.SoKhachToiDa = int.Parse(txtSoKhachToiDa.Text);
                    lp.DonGia = float.Parse(txtDonGia.Text);

                    if (MessageBox.Show("Bạn có muốn cập nhật loại phòng?", "Thông báo", MessageBoxButtons.YesNo) == DialogResult.Yes)
                    {
                        LoaiPhongDAO.CapNhatLoaiPhong(lp);
                        MessageBox.Show("Cập nhật thành công", "Thông báo");
                    }
                    else
                    {
                        return;
                    }

                    DataTable dt = LoaiPhongDAO.GetAll();
                    LoadListview(lvLoaiPhong, dt);
                   
                }
                else
                    MessageBox.Show("Chọn loại phòng muốn cập nhật", "Thông báo");
            }
            if (rdbLoaiKhach.Checked == true)
            {
                if (txtTenLoaiKhach.Text == "")
                {
                    MessageBox.Show("Loại khách không để trống", "Thông báo");
                    return;
                }
                if (txtHeSoLoaiKhach.Text == "")
                {
                    MessageBox.Show("Hệ số không để trống", "Thông báo");
                    return;
                }

                if (lvLoaiKhach.SelectedIndices.Count > 0)
                {
                    int index = lvLoaiKhach.SelectedIndices[0];

                    LoaiKhachHangDTO lk = new LoaiKhachHangDTO();
                    lk.MaLoaiKhach = int.Parse(lvLoaiKhach.Items[index].SubItems[0].Text);
                    lk.TenLoaiKhach = txtTenLoaiKhach.Text;
                    lk.HeSoLoaiKhach = int.Parse(txtHeSoLoaiKhach.Text);

                    if (MessageBox.Show("Bạn có muốn cập nhật loại phòng?", "Thông báo", MessageBoxButtons.YesNo) == DialogResult.Yes)
                    {
                        LoaiKhachHangDAO.CapNhatLoaiKhach(lk);
                        MessageBox.Show("Cập nhật thành công", "Thông báo");
                    }
                    else
                    {
                        return;
                    }

                    DataTable dt = LoaiKhachHangDAO.GetAll();
                    LoadListview(lvLoaiKhach, dt);
                    
                }
                else
                    MessageBox.Show("Chọn loại khách muốn cập nhật", "Thông báo");
            }
            if (rdbPhuThu.Checked == true)
            {
                if (txtSoThuTu.Text == "")
                {
                    MessageBox.Show("Số thứ tự không để trống", "Thông báo");
                    return;
                }
                if (txtTyLePhuThu.Text == "")
                {
                    MessageBox.Show("Tỷ lệ phụ thu không để trống", "Thông báo");
                    return;
                }
                
                if (lvPhuThu.SelectedIndices.Count > 0)
                {
                    int index = lvPhuThu.SelectedIndices[0];

                    PhuThuDTO pt = new PhuThuDTO();
                    pt.MaPhuThu = int.Parse(lvPhuThu.Items[index].SubItems[0].Text);
                    pt.SoThuTu = int.Parse(txtSoThuTu.Text);
                    pt.TyLePhuThu = float.Parse(txtTyLePhuThu.Text);

                    if (MessageBox.Show("Bạn có muốn cập nhật phòng?", "Thông báo", MessageBoxButtons.YesNo) == DialogResult.Yes)
                    {
                        PhuThuDAO.CapNhatTyLePhuThu(pt);
                        MessageBox.Show("Cập nhật thành công", "Thông báo");
                    }
                    else
                    {
                        return;
                    }

                    DataTable dt = PhuThuDAO.GetAll();
                    LoadListview(lvPhuThu, dt);
                    
                }
                else
                    MessageBox.Show("Chọn phụ thu muốn cập nhật", "Thông báo");
            }
        }

        private void lvLoaiPhong_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (lvLoaiPhong.SelectedIndices.Count > 0)
            {
                int index = lvLoaiPhong.SelectedIndices[0];

                DataTable dt = LoaiPhongDAO.GetAll();
                DataRow dr = dt.Rows[index];

                txtLoaiPhong.Text = dr["TenLoaiPhong"].ToString();
                txtSoKhachToiDa.Text = dr["SoKhachToiDa"].ToString();
                txtDonGia.Text = dr["DonGia"].ToString();
            }
        }

        private void lvLoaiKhach_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (lvLoaiKhach.SelectedIndices.Count > 0)
            {
                int index = lvLoaiKhach.SelectedIndices[0];

                DataTable dt = LoaiKhachHangDAO.GetAll();
                DataRow dr = dt.Rows[index];

                txtTenLoaiKhach.Text = dr["TenLoaiKhach"].ToString();
                txtHeSoLoaiKhach.Text = dr["HeSoLoaiKhach"].ToString();
            }
        }

        private void lvPhuThu_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (lvPhuThu.SelectedIndices.Count > 0)
            {
                int index = lvPhuThu.SelectedIndices[0];

                DataTable dt = PhuThuDAO.GetAll();
                DataRow dr = dt.Rows[index];

                txtSoThuTu.Text = dr["SoThuTu"].ToString();
                txtTyLePhuThu.Text = dr["TyLePhuThu"].ToString();
            }
        }

        private void btnClose_Click(object sender, EventArgs e)
        {
            this.Close();
        }
        public bool IsNumberInt(string pValue)
        {
            foreach (Char c in pValue)
            {
                if (!Char.IsDigit(c))
                    return false;
            }
            return true;
        }
        public bool IsNumberFloat(string pValue)
        {
            int dem = 0;
            for (int i = 0; i < pValue.Length; i++)
            {
                Char c = pValue[i];
                if ((i == 0 && c == '.'))
                    return false;
                if (c == '.')
                    dem = dem + 1;
                if (dem > 1)
                    return false;
                if (!Char.IsDigit(c) && c != '.')
                    return false;
            }
            return true;
        }

        private void txtDonGia_TextChanged(object sender, EventArgs e)
        {
            if (txtDonGia.Text != null)
            {
                if (IsNumberInt(txtDonGia.Text) == false)
                {
                    txtDonGia.Text = "";
                    MessageBox.Show("Đơn giá phải nhập kiểu số.", "Thông báo");
                }
            }
        }

        private void txtHeSoLoaiKhach_TextChanged(object sender, EventArgs e)
        {
            if (txtHeSoLoaiKhach.Text != null)
            {
                if (IsNumberFloat(txtHeSoLoaiKhach.Text) == false)
                {
                    txtHeSoLoaiKhach.Text = "";
                    MessageBox.Show("Hệ số phải nhập kiểu số.", "Thông báo");
                }
            }
        }

        private void txtSoKhachToiDa_TextChanged(object sender, EventArgs e)
        {
            if (txtSoKhachToiDa.Text != null)
            {
                if (IsNumberInt(txtSoKhachToiDa.Text) == false)
                {
                    txtSoKhachToiDa.Text = "";
                    MessageBox.Show("Số khách tối đa phải nhập kiểu số.", "Thông báo");
                }
            }
        }

        private void txtSoThuTu_TextChanged(object sender, EventArgs e)
        {
            if (txtSoThuTu.Text != null)
            {
                if (IsNumberInt(txtSoThuTu.Text) == false)
                {
                    txtSoThuTu.Text = "";
                    MessageBox.Show("Số thứ tự đa phải nhập kiểu số.", "Thông báo");
                }
            }
        }

        private void txtTyLePhuThu_TextChanged(object sender, EventArgs e)
        {
            if (txtTyLePhuThu.Text != null)
            {
                if (IsNumberFloat(txtTyLePhuThu.Text) == false)
                {
                    txtTyLePhuThu.Text = "";
                    MessageBox.Show("Tỷ lệ phụ thu phải nhập kiểu số.", "Thông báo");
                }
            }
        }
    }
}
